/*
	This file is part of AVRCppLib.

    AVRCppLib is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    AVRCppLib is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with AVRCppLib.  If not, see <http://www.gnu.org/licenses/>.

    Copyright (C) Maxime Lemonnier 2007-2011
 */

#ifndef BLINK_H_
#define BLINK_H_
#include "CppExtensions.h"
#include "BitManipulation.h"

/*!
 * Simple led blinking class
 */
class Blink
{
private:
	IOAddress port;
	IOAddress ddr;
	uint8_t pin;
	size_t repetitions;
	size_t delayMS;
public:
	/*!
	 * The constructor
	 * @param port the port's \b address (ex. &PORTA)
	 * @param ddr the \a port data direction register's \b address (ex. &DDRA)
	 * @param pin the pin number on port \a port
	 * @param repetitions the default number of repetition
	 * @param delayMS the default delay between repetitions (in milliseconds)
	 * @see blink()
	 */
	Blink(IOAddress port, IOAddress ddr, uint8_t pin, uint8_t repetitions = 2, size_t delayMS = 100);

	/*!
	 * Blink led funciton
	 * @param repetitions number of repetitions
	 * @param delayMS delay between repetitions (in miliseconds)
	 */
	void blink(size_t repetitions, size_t delayMS);

	/*!
	 * Blink led funciton
	 */
	void blink()
	{
		blink(repetitions, delayMS);
	}
};
#endif
